package top.infopub.job.fia.service;

import java.math.BigDecimal;
import java.util.Map;

import top.infopub.model.fia.PayBill;
import top.infopub.generic.GenericService;

public interface PayBillService extends GenericService<PayBill, String> {
 
    /** codegen **/
    
	/** 统计 指标发生金额： 涉及到 付款单登记表 采用 付款归属项目 关联**/
    
    /**
     * 查询某个项目投资性现金流出=（内部总包款+外部总包款+专业分包款+专业设备采购款+政府代付费+项目前期费） 
     * @param where payDateStart=开始时间，payDateEnd=结束时间，proCode
     * @return 
     * @see
     */
    BigDecimal selectProQaOfCashOut(Map<String, Object> where);
    
    /**
     * 查询某个项目 21=内部总包款 22=外部总包款 23=专业分包款 24=专业设备采购款 25=政府代付费 26=项目前期费 
     * @param where payDateStart=开始时间，payDateEnd=结束时间，proCode，singleType
     * @return 
     * @see
     */
    BigDecimal selectProSingleOfCashOut(Map<String, Object> where);

    /**
     * 查询某个区域投资性现金流出 
     * @param where payDateStart=开始时间，payDateEnd=结束时间，hrOrgAreaId
     * @return 
     * @see
     */
    BigDecimal selectAreaQaOfCashOut(Map<String, Object> where);

    /**
     * 汇总所有项目投资性现金流出   o.sguid is not null<项目与公司未绑定>
     * @param where payDateStart=开始时间，payDateEnd=结束时间
     * @return 
     * @see
     */
    BigDecimal selectAllProQaOfCashOut(Map<String, Object> where);
    
    /**
     * 查询某个项目  投资额 = 政府代付费+项目前期费+融资业务付息(建设期利息)+融资业务付费(融资费用+融资担保费) 
     * @param where payDateStart=开始时间，payDateEnd=结束时间，proCode
     * @return 
     * @see
     */
    BigDecimal selectProQaOfInvest(Map<String, Object> where);
    
    /**
     * 查询某个项目  25=政府代付费 26=项目前期费 融资业务付息(27=建设期利息) 融资业务付费(28=融资费用 29=融资担保费) 
     * @param where payDateStart=开始时间，payDateEnd=结束时间，proCode，singleType
     * @return 
     * @see
     */
    BigDecimal selectProSingleOfInvest(Map<String, Object> where);
    
    /**
     * 查询某个区域 投资额
     * @param where payDateStart=开始时间，payDateEnd=结束时间，hrOrgAreaId
     * @return 
     * @see
     */
    BigDecimal selectAreaQaOfInvest(Map<String, Object> where);

    /**
     * 汇总所有项目 投资额   o.sguid is not null<项目与公司未绑定>
     * @param where payDateStart=开始时间，payDateEnd=结束时间
     * @return 
     * @see
     */
    BigDecimal selectAllProQaOfInvest(Map<String, Object> where);
    
    /**
     * 查询某个项目  6. 税金：财务-【付款单登记表】支出类型-税金-费用化-{实付金额}（*统计时间：付款日期，原始单位：元） 
     * @param where payDateStart=开始时间，payDateEnd=结束时间，proCode
     * @return 
     * @see
     */
    BigDecimal selectProQaOfTaxFee(Map<String, Object> where);
    
    /**
     * 查询某个项目  融资息差[部分] = 27建设期利息{实付金额}+28融资费用{实付金额}+29融资担保费{实付金额} 
     * @param where payDateStart=开始时间，payDateEnd=结束时间，proCode
     * @return 
     * @see
     */
    BigDecimal selectProQaOfFinSpread(Map<String, Object> where);

    void payBillJob();
    
}